//仓库store文件  -- 集中管理数据
//导入Vuex模块
import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)
//创建仓库对象，仓库对象就是整个应用的状态（数据）管理中心
const store = new Vuex.Store({

	//state属性：存储仓库中的数据及其初始值；当前数据，所有组件都可以调用
	// 唯一可以修改数据的途径，commit(funcName);
	state: {
		seller:null,
		buller:null,
		categorys: [],
		shopCar:[],
	
	},
	//getters是计算状态的，类似组件的computed属性
	getters: {
		update: function(state, seller) {
			return state.seller = seller;
		},
		getData: function(state) {
			return state.mydata + '新加的';
		}
	},
	//默认情况下，不能直接更改仓库中的状态（数据），需要通过multations中的方法，才可以修改数据.与getters/state的调用有区别
	//	，与getters/state的调用有区别，this.$store.state/this.$store.getters
	//     mutations， this.$store.commit(funcName);
	//方法的默认第一个参数：state对象，
	//参数2：接收commit提交mutations时，传递过来的数据
	mutations: {
		
		updateSeller: function(state, obj) {
			//mutations 用于同步函数中，如果是异步处理需要使用action关键字
			state.seller = obj;

		},
		updateCategory: function(state, obj) {
			state.categorys = obj;

		},
		updateBuller: function(state, obj) {
			//mutations 用于同步函数中，如果是异步处理需要使用action关键字
			state.buller = obj;

		},
		updateShopCar: function(state, obj) {
			state.shopCar = obj;

		},
		
	},
	//mutations只能用于同步数据修改，如果是异步数据修改，需要action
	//但是更新state的唯一方法是commit(mutation),所以只能在action中不能直接修改，
	//	只能再次commit(mutation);

	actions: {
		calc: function(state, data) {
			setTimeout(function() {
				//				state.commit('add');
				state.commit('genxin', data);

			}, 1000);

			//			this.$axios.get().then(function(result){
			//				state.commit('genxin',result);
			//			})

		}
	}

})

//es6解构赋值
//var a= 10;
//var b = 15;
//数组的解构赋值,变量与数组中的元素一一对应，有顺序
//var [a,b] = [10,15]

//对象 ：变量名称与对象的名称一一对应 无顺序
//obj = {name:'yan'};
//var name = obj.name;
//var {name} = {name:'yan'}

//3写法 .  ***通过对象展开运算符导入数据  ...
//			computed:{
//				getName:function(){
//					return 'getName的返回值'
//				},
//				
//				//，mapState()返回值是个对象，{mydata:function,data2:function}
//				...mapState([
//					'mydata','data2','data3'
//				]),
//...mapGetters([
//				'getAll'
//			])
//				
//			},
//			methods:{
//			change:function(){
//vuex中，不能直接改变store中的状态，唯一改变状态的路径就是通过显式的commit(mutations)
//				this.$store.commit('add');
//			},
//btnClick:function(){
//异步处理
//				//this.$store.dispatch('calc')调用action的方法；
//				//参数1：action的函数名称
//				//参数2：传递的数据
//				this.$store.dispatch('calc',{value:'传递的action数据'});
//			}

export default store